<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        // 设置属性到不同的作用域
        pageContext.setAttribute("name_1", "lin_1");    // 数据在一个页面中有效(JSP页面) 作用范围最小
        request.setAttribute("name_2", "lin_2");        // 数据在一次请求中有效, 如果接收方没有再次转发, 数据丢失, 即请求结束, 数据丢失
        session.setAttribute("name_3", "lin_3");        // 数据在一个会话中有效, 从用户首次访问服务器开始, 到会话超时或显式销毁
        application.setAttribute("name_4", "lin_4");    // 数据在整个应用中有效, web应用启动到停止期间都有效
    %>

    <%
        // 使用 pageContext.findAttribute 查找属性
        // findAttribute 会按照 pageContext -> request -> session -> application 的顺序查找
        String name_1 = (String)pageContext.findAttribute("name_1"); // 查找 pageContext 范围内的 name_1
        String name_2 = (String)pageContext.findAttribute("name_2"); // 查找 request 范围内的 name_2
        String name_3 = (String)pageContext.findAttribute("name_3"); // 查找 session 范围内的 name_3
        String name_4 = (String)pageContext.findAttribute("name_4"); // 查找 application 范围内的 name_4
        String name_5 = (String)pageContext.findAttribute("name_5"); // 查找 name_5，预期为 null
    %>

    <%--推荐使用EL表达式取值--%>
    <h1>取出的值为: </h1>
    <h3>${name_1}</h3> <!-- 输出: lin_1 -->
    <h3>${name_2}</h3> <!-- 输出: lin_2 -->
    <h3>${name_3}</h3> <!-- 输出: lin_3 -->
    <h3>${name_4}</h3> <!-- 输出: lin_4 -->
    <h3>${name_5}</h3> <!-- 若结果为null, 页面什么也不显示 -->
    <h3><%=name_5%></h3> <!-- 若结果为null, 页面显示null -->
</body>
</html>
